﻿Imports LoboDevelop.LibUtilidades
Module mduImpresion

    ''' <summary>
    ''' Rellena un número con ceros a la izquierda. (ej. Ceros(5, 3) = 00003)
    ''' </summary>
    ''' <param name="iCeros">Indica la longitud que debe tener la cadena.</param>
    ''' <param name="iNumero">Indica el número que desea rellenar.</param>
    ''' <returns>Devuelve una cadena (string)) con el número ingresado y ceros a la izquierda con la longitud definida.</returns>
    Public Function Ceros(ByVal iCeros As Integer, ByVal iNumero As Integer) As String
        Dim str As String = ""
        If iCeros = 0 Then
            Return iNumero
        End If
        Dim i As Integer = iCeros
        Do Until i = 0
            str += "0"
            i -= 1
        Loop
        str = Strings.Right(str & Trim(iNumero), iCeros)
        Return str
    End Function

    Public cadNL As String = (Chr(13) + Chr(10))


    'Procedimientos para imprimir

    '------------
    'No me funciona muy bien el cambio de color
    Dim CodNegro As String = Chr(27) & "r" & Chr(0) 'Imprime en color negro
    Dim CodRojo As String = Chr(27) & "r" & Chr(1) 'Imprime en color rojo
    '------------
    Dim CodLetraPequena As String = Chr(27) & "!" & Chr(1) '40 caracteres por linea
    Dim CodLetraMediana As String = Chr(27) & "!" & Chr(33) '33 Caracteres por linea
    Dim CodLetraGrande As String = Chr(27) & "!" & Chr(16) '23 CARACTERES X LINEA
    Dim CodCortaPapel As String = Chr(27) & "m" 'Comando para cortar papel
    Dim CodAbreCajon As String = Chr(27) & Chr(112) & 0 'Abre el cajon de monedas


    Public Sub ImprimirFactura(ByVal NumFactura As Integer, _
                               ByVal Credito As Boolean, _
                               ByVal UsuarioCodigo As Integer, _
                               ByVal UsuarioNombre As String, _
                               ByVal Fecha As Date, _
                               ByVal ClienteCodigo As Integer, _
                               ByVal ClienteNombre As String, _
                               ByVal DiasPlazo As Integer, _
                               ByVal MontoExento As String, _
                               ByVal MontoGravado As String, _
                               ByVal SubTotal As String, _
                               ByVal Descuento As String, _
                               ByVal MontoImpuesto As String, _
                               ByVal Total As String, _
                               ByVal Paga As String, _
                               ByVal Vuelto As String, _
                               ByVal dt As DataTable, _
                               ByVal Copia As Boolean)
        Dim lpt1 As New System.Text.StringBuilder

        'Encabezado
        '------------
        'El encabezado se puede guardar en my.settings o algo parecido, en la BD o en cualquier lado.
        ' With My.Settings
        'lpt1.Append(CodRojo) 'Para color rojo
        lpt1.Append(CodLetraGrande) 'Para letra tamaño grande
        lpt1.AppendLine("NOMBRE CAFETERIA")
        lpt1.Append(CodLetraPequena) 'Para letra tamaño normal
        lpt1.AppendLine("Dir. Espana")
        'lpt1.Append(CodNegro) 'Para color negro
        lpt1.AppendLine("----------------------------------------")
        'End With

        lpt1.Append(CodLetraGrande)
        If Credito Then
            lpt1.Append("FACTURA DE CREDITO No. ")
        Else
            lpt1.Append("FACTURA DE CONTADO No. ")
        End If
        lpt1.Append(Ceros(10, NumFactura))
        lpt1.AppendLine(CodLetraPequena)
        lpt1.Append("Vend: ")
        lpt1.Append(String.Format("{0}-{1}", Ceros(2, UsuarioCodigo), UsuarioNombre.PadRight(15))) 'PadRight alinea a la izquierda 
        lpt1.Append("Fecha:")
        lpt1.AppendLine(Fecha.Date)
        lpt1.Append("Cliente: ")
        If Credito Then
            lpt1.Append(Ceros(5, ClienteCodigo))
            lpt1.Append("           ")
            lpt1.AppendLine(String.Format("Dias Plazo: {0}", Ceros(3, DiasPlazo)))
        Else
            lpt1.AppendLine(Ceros(5, ClienteCodigo))
        End If

        lpt1.Append(CodLetraGrande)
        lpt1.Append(Strings.Left(ClienteNombre, 32))
        lpt1.AppendLine(CodLetraPequena)

        lpt1.AppendLine("----------------------------------------")
        lpt1.AppendLine("Cant      Descripcion                IVI")
        lpt1.AppendLine("Desc        P/U                    Total")
        lpt1.AppendLine("----------------------------------------")


        'Dim dt = dtDetalle.Select("", dtDetalle.DescripcionColumn.ColumnName + " ASC")
        'For Each r As dataRow In dt
        '    'r = dt.Rows(i)
        '    lpt1.Append(r.Cantidad.ToString("N2").PadRight(10))
        '    lpt1.Append(" ")
        '    lpt1.Append(r.Descripcion.ToString.PadRight(27))
        '    lpt1.Append(" ")
        '    lpt1.AppendLine(r.IV.ToString.PadRight(1))
        '    If CDec(r.Descuento) > 0 Then
        '        lpt1.Append(r.Descuento.ToString("N2").PadRight(4))
        '        lpt1.Append(" ") '1
        '    Else
        '        lpt1.Append("     ") '5
        '    End If
        '    lpt1.Append(r.Precio.ToString("N2").PadLeft(17))
        '    lpt1.Append(" ") '1
        '    lpt1.AppendLine(r.TotalLinea.ToString("N2").PadLeft(17))
        '
        'lpt1.AppendLine()
        '
        'Next

        ''-----------------------
        ''Esto Genera por ejemplo: Alineado para que cada linea no exceda los 40 carateres
        ''1.00      CAFE                         *
        ''5.00           2.00                 2.00
        ''-----------------------
        lpt1.AppendLine("----------------------------------------")
        '
        lpt1.Append("Monto Exento....: ")
        lpt1.AppendLine(MontoExento.PadLeft(22))
        lpt1.Append("Monto Gravado...: ")
        lpt1.AppendLine(MontoGravado.PadLeft(22))
        lpt1.Append("Sub Total.......: ")
        lpt1.AppendLine(SubTotal.PadLeft(22))
        If CDec(Descuento) > 0 Then
            lpt1.Append("Descuento.......: ")
            lpt1.AppendLine(Descuento.PadLeft(22))
        End If
        lpt1.Append("IVI.............: ")
        lpt1.AppendLine(MontoImpuesto.PadLeft(22))
        '
        lpt1.Append(CodLetraMediana) 'Activa la letra mediana de la impresora 
        lpt1.Append("TOTAL:")
        lpt1.AppendLine(Total.PadLeft(14))
        lpt1.Append(CodLetraPequena)
        '
        'If Credito = False Then
        '    lpt1.Append("Paga con........: ")
        '    lpt1.AppendLine(Paga.PadLeft(22))
        '    lpt1.Append("Vuelto..........: ")
        '    lpt1.AppendLine(Vuelto.PadLeft(22))
        'End If
        '
        '          "----------------------------------------"       
        With My.Settings
            lpt1.AppendLine("----------------------------------------")
            lpt1.AppendLine("[ ]Articulo Exento - [*]Articulo Gravado")
            lpt1.AppendLine("  Impuesto de Ventas Incluido (I.V.I.)")
            lpt1.AppendLine()
            lpt1.AppendLine("    *** GRACIAS POR PREFERIRNOS ***")
        End With
        lpt1.AppendLine(TimeOfDay)
        'lpt1.AppendLine(Strings.Right("     " & "NT." & txtNumTransac.Text, 13))
        '
        'lpt1.AppendLine(Chr(26) & Chr(27) & "J" & Chr(250) & Chr(29) & "V" & Chr(1))
        'lpt1.AppendLine(Chr(&H1B) & "i")
        lpt1.AppendLine()
        lpt1.AppendLine()
        lpt1.AppendLine() 'Se necesitan 7 lineas en blanco para que la factura salga sin cortar informacion
        lpt1.AppendLine()
        lpt1.AppendLine()
        lpt1.AppendLine()
        lpt1.AppendLine()
        lpt1.AppendLine(CodCortaPapel)

        lpt1.AppendLine(CodAbreCajon) ''Abre Cajon 


        ImprimirTicket(lpt1.ToString, String.Format("PFSGeneric_Factura: {0}", ClienteNombre))
    End Sub
    Private Sub ImprimirTicket(ByVal Cadena As String, ByVal DocName As String)
        'Dim res = Mensaje("Vista Previa", eSysIcons.Question, "Mostrar la vista previa en pantalla.")
        'If res = MsgBoxResult.Yes Then
        '    Using f As New frmImpresionTicketPreview
        '        f.Texto = Cadena.ToString
        '        f.ShowDialog()
        '    End Using
        'End If
        RawPrinter.SendStringToPrinter(My.Settings.ParamImpresora1, Cadena, DocName)
    End Sub

End Module
